package cz.muni.fi.pa165.travelagency.api.entities;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 *
 * @author ljungman
 */
public interface IPackageTour extends Serializable {

    /**
     * Returns list of <code>ITour</code>s which are available for this <code>IPackageTour</code>
     * @return list of <code>ITour</code>s
     */
    List<ITour> getAvailableTours();

    /**
     * Returns how many people can order this <code>IPackageTour</code>
     * @return capacity of this <code>IPackageTour</code>
     */
    int getCapacity();

    /**
     * Returns textual description of this <code>IPackageTour</code>
     * @return description
     */
    String getDescription();

    /**
     * Returns destination where this <code>IPackageTour</code> will take place
     * @return destiantion
     */
    String getDestination();

    /**
     * Returns date when this <code>IPackageTour</code> ends
     * @return date of end of this <code>IPackageTour</code>
     */
    Date getEnd();

    /**
     * Returns id of this <code>IPackageTour</code>
     * @return id
     */
    Long getId();

    /**
     * Returns name of this <code>IPackageTour</code>
     * @return name
     */
    String getName();

    /**
     * Returns list of <code>IOrder</code>s which contain this <code>IPackageTour</code>
     * @return list of <code>IOrder</code>s
     */
    List<IOrder> getOrders();

    /**
     * Returns price for person for just this <code>IPackageTour</code>
     * @return price for person
     */
    BigDecimal getPricePerPerson();

    /**
     * Returns date when this <code>IPackageTour</code> starts
     * @return date of start
     */
    Date getStart();

    /**
     * Sets list of <code>ITour</code>s which are available on this <code>IPackageTour</code>
     * @param availableTours list of available <code>ITour</code>s
     */
    void setAvailableTours(List<ITour> availableTours);

    /**
     * Sets how many people can order this <code>IPackageTour</code>
     * @param capacity capacity of <code>IPackageTour</code>
     */
    void setCapacity(int capacity);

    /**
     * Sets description of this <code>IPackageTour</code>
     * @param description 
     */
    void setDescription(String description);

    /**
     * Sets destination of this <code>IPackageTour</code>
     * @param destination 
     */
    void setDestination(String destination);

    /**
     * Sets date when this <code>IPackageTour</code> ends
     * @param end date when this <code>IPackageTour</code> ends
     */
    void setEnd(Date end);

    /**
     * Sets id of this <code>IPackageTour</code>
     * @param id 
     */
    void setId(Long id);

    /**
     * Sets name of this <code>IPackageTour</code>
     * @param name 
     */
    void setName(String name);

    /**
     * Sets list of <code>IOrder</code>s which contain this <code>IPackageTour</code>
     * @param orders list of <code>IOrder</code>s 
     */
    void setOrders(List<IOrder> orders);

    /**
     * Sets price for one person for this <code>IPackageTour</code>
     * @param pricePerPerson 
     */
    void setPricePerPerson(BigDecimal pricePerPerson);

    /**
     * Sets date when this <code>IPackageTour</code> starts
     * @param start 
     */
    void setStart(Date start);
}
